import { ApiProperty } from '@nestjs/swagger';
import { IsEnum, IsNotEmpty, IsOptional, IsString } from 'class-validator';

/**
 * 微信素材类型枚举
 */
export enum WechatMaterialType {
  IMAGE = 'image', // 图片
  VOICE = 'voice', // 语音
  VIDEO = 'video', // 视频
  THUMB = 'thumb', // 缩略图
  NEWS = 'news', // 图文
}

/**
 * 微信素材上传DTO
 */
export class UploadMaterialDto {
  @ApiProperty({
    description: '素材类型',
    enum: WechatMaterialType,
    example: WechatMaterialType.IMAGE,
  })
  @IsNotEmpty({ message: '素材类型不能为空' })
  @IsEnum(WechatMaterialType, { message: '无效的素材类型' })
  type: WechatMaterialType;

  @ApiProperty({
    description: '文件URL',
    example: 'https://example.com/image.jpg',
  })
  @IsNotEmpty({ message: '文件URL不能为空' })
  @IsString({ message: '文件URL必须是字符串' })
  fileUrl: string;

  @ApiProperty({
    description: '文件名称',
    example: 'image.jpg',
    required: false,
  })
  @IsOptional()
  @IsString({ message: '文件名称必须是字符串' })
  fileName?: string;

  @ApiProperty({
    description: '视频标题（仅视频类型需要）',
    example: '视频标题',
    required: false,
  })
  @IsOptional()
  @IsString({ message: '视频标题必须是字符串' })
  title?: string;

  @ApiProperty({
    description: '视频描述（仅视频类型需要）',
    example: '视频描述内容',
    required: false,
  })
  @IsOptional()
  @IsString({ message: '视频描述必须是字符串' })
  introduction?: string;
}

/**
 * 图文素材文章DTO
 */
export class NewsArticleDto {
  @ApiProperty({
    description: '文章标题',
    example: '文章标题',
  })
  @IsNotEmpty({ message: '文章标题不能为空' })
  @IsString({ message: '文章标题必须是字符串' })
  title: string;

  @ApiProperty({
    description: '文章内容',
    example: '文章内容',
  })
  @IsNotEmpty({ message: '文章内容不能为空' })
  @IsString({ message: '文章内容必须是字符串' })
  content: string;

  @ApiProperty({
    description: '文章摘要',
    example: '文章摘要',
    required: false,
  })
  @IsOptional()
  @IsString({ message: '文章摘要必须是字符串' })
  digest?: string;

  @ApiProperty({
    description: '文章封面图片素材ID',
    example: 'MEDIA_ID',
    required: false,
  })
  @IsOptional()
  @IsString({ message: '封面图片素材ID必须是字符串' })
  thumb_media_id?: string;

  @ApiProperty({
    description: '作者',
    example: '作者名称',
    required: false,
  })
  @IsOptional()
  @IsString({ message: '作者必须是字符串' })
  author?: string;

  @ApiProperty({
    description: '原文链接',
    example: 'https://example.com/article',
    required: false,
  })
  @IsOptional()
  @IsString({ message: '原文链接必须是字符串' })
  content_source_url?: string;
}

/**
 * 上传图文素材DTO
 */
export class UploadNewsDto {
  @ApiProperty({
    description: '图文素材文章列表',
    type: [NewsArticleDto],
  })
  @IsNotEmpty({ message: '图文素材文章列表不能为空' })
  articles: NewsArticleDto[];
}
